package org.zk.controller;

import com.github.pagehelper.Page;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import org.zk.entity.Result;
import org.zk.entity.User;
import org.zk.service.UserService;

import java.util.HashMap;
import java.util.Map;
/**
 * 1.如果一个controller里面大部分返回的都是页面的话，使用@Controller，这时返回的都是页面
 * 2.如果大部分返回的都是Json或字符串的话，就使用@RestController。如果它碰到Stirng，就返回String
 * int返回int（即基本数据类型还返回相应的数据类型），但是对象会返回json
 * 3.此时(使用@RestController)如果某方法仍要返回视图，则使用ModelAndView
 */
@RestController
public class UserController {
    //注入Services层
    @Autowired
    @Getter
    @Setter
    private UserService userService;

    //=========================== 测试@RestController注解与@Controller注解的区别 ========================
    //============================                                              ========================

    @RequestMapping("/test1")//URL访问：localhost:8080/test1.do
    public String test1() {
        return "testttttt";//空白页面上会出现字符串testttttt,而不是像@Controller一样跳转到指定的视图。
    }


    @RequestMapping("/getUser")//URL访问：localhost:8080/getUser.do
    public User getUser() {
        User user = new User();
        user.setId(1);
        user.setUserName("admin");
        user.setPassWord("123");
        return user;//空白页面上出现json格式的字符串{"id":1,"userName":"admin","passWord":"123","sal":0.0}。
    }


    //==================================== SSM Demo ============================================
    //====================================  分割线 ==============================================
    //===========================   以下是SSM框架增删查改的业务   =================================
    //============================                             ==================================
    //==========================================================================================
    //==========================================================================================
    //==========================================================================================

    //对freeMarker首页的访问要先访问控制器，URL输入：  localhost：8080/toIndex.do
    @RequestMapping("/toIndex")
    public ModelAndView toIndex() {
        return new ModelAndView("index");
    }//通过控制器转到对应的freeMarker页面

    //处理/ftl/index.ftl页面异步请求的控制器
    @RequestMapping("/getPage")
    public Map queryUsersByPage(int pageSize, int pageNum, User user) {
        Map map = new HashMap();
        map.put("pageSize", pageSize);
        map.put("pageNum", pageNum);
        map.put("user", user);
        //利用pageHelper中的Page类盛放结果集，再把page对象放到map中返回给异步页面
        Page page = userService.queryLikeUsers(map);
        map.put("page", page);
        map.put("totalPage", page.getPages());
        return map;//把map返回给异步页面
    }

    //处理编辑用户事件editEvent函数中的请求，请求从/ftl/index.ftl页面发出
    @RequestMapping("/editPage")
    public ModelAndView editPage(User user) {//这里的User自动跟页面中editEvent函数中的content里传的id绑定。
        User u = userService.getUserById(user.getId());//由id得到一个user对象
        Map<String, Object> maps = new HashMap<>();
        maps.put("data", u);//把找的user对象放到map中
        return new ModelAndView("edit", maps);//通过ModelAndView把封装好的数据转发到指定的页面
    }

    //处理/ftl/edit.ftl页面中发出的修改用户数据的请求
    @RequestMapping("/edit")
    public Result editUser(User user) {//这里的user和/ftl/edit.ftl页面中的$.ajax函数中的data{}中的key相绑定。
        userService.updateUser(user);
        return new Result();
    }
    //处理/ftl/add.html页面中发出的添加新用户的请求
    @RequestMapping("/add")
        public Result addUser(User user){
            userService.addUser(user);
            return new Result();
    }
    //处理删除用户事件dedlEvent函数中的请求，请求从/ftl/index.ftl页面发出
    @RequestMapping("/del")
    public  Result delUser(User user){// 这里的user和页面中异步函数中data{}里的id绑定。
        userService.delUser(user);
        return new Result();//返回的东西其实并没有展现在页面中，这个Result没有发挥出它的用处。
    }


}
